package heap

// 符号引用
type SymRef struct {
	cp        *ConstantPool
	className string
	class     *Class // 缓存解析后类结构体指针，类符号应用只用解析一次，后续使用缓存值即可
}

func (self *SymRef) ResolvedClass() *Class {
	// 如果未解析进行解析，已经解析就直接返回缓存的 class 指针
	if self.class == nil {
		self.resolvedClassRef()
	}
	return self.class
}

func (self *SymRef) resolvedClassRef() {
	d := self.cp.class
	c := d.loader.LoadClass(self.className)
	if !c.isAccessibleTo(d) {
		panic("java.lang.IllegalAccessError")
	}
	self.class = c
}
